/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package utils.problemaJosephus;
import interfaces.problemaJosephus.LlistaIter;

/**
 *
 * @author Monica
 */

public class Iterador implements LlistaIter{

 private LlistaEnllacada laLlista;
 private NodeLlista actual;
 boolean primer=true;
 int aux=1;
 public Object viu, mort;

 /**
  *
  * @param unaLlista
  * inicialitzem iterador passant com a paràmetre una llista de la classe Llista Enllaçada
  */
  public Iterador(LlistaEnllacada unaLlista) {
        laLlista=unaLlista;
        if (laLlista.esBuida()) {
            actual=laLlista.capcalera;
        }
        else {
            actual=laLlista.capcalera.seguent;
        }
  }

 /**
  *
  * @param nomPers
  * procediment per insertar els noms de les persones que volen jugar; li passarem com a paràmetre l'objecte persona
  */
  public void insertar(Object nomPers) {
    if (actual==null) {
      System.out.println("Error");
    }
    else {
    NodeLlista nou = new NodeLlista(nomPers,actual.seguent);
    actual.seguent=nou;
    actual=nou;
    }
  }

  /**
   * procediment que fa que l'actual sigui el primer
   */
  public void retornar() {
    actual=laLlista.capcalera;
  }

  /**
   * procediment que ens mostra la posició seguent a l'actual posició
   */
  public void avancar() {
    if (actual!=null) {
      actual=actual.seguent;
    }
  }

 /**
  *
  * @param pos
  * procediment on li passem la posicio (pos) que volem eliminar i elimina aquella posicio
  */
  public void eliminar(int pos) {
    boolean segon=true;
    if(primer==true){
    actual = laLlista.capcalera;
    primer=false;
    }
    if((actual==null)||(actual.seguent==null)) {
        retornar();
    }
    while((actual.seguent!=null)&&(segon==true)) {
      actual=actual.seguent;
      aux++;
       if((actual==null)||(actual.seguent==null)) {
           retornar();
       }
       if(actual.seguent==null){
       System.out.println("Error");
       }
       if(aux==pos){
       mort=actual.seguent.dada;
       actual.seguent=actual.seguent.seguent;
       segon=false;
       }
       if(laLlista.capcalera.seguent.seguent==null){
       viu=laLlista.capcalera.seguent.dada;
       return;
       }
       if(aux==pos) {
           aux=1;
       }
       if(actual.seguent==null) {
           retornar();
       }
    }
  }

}